home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 07 - 1991 / 07.12 Dec 91 / MacSocket Code / server.c < prev   
Encoding:
C/C++ Source or Header  |  1991-04-08  |  1.9 KB  |  92 lines  |  [TEXT/KAHL]

  1. /***
  2.  ***
  3.  *** To send data between stream sockets (having communication style
  4.  *** SOCK_STREAM)
  5.  *** Code based on an example taken from SUN® Network Programming Guide,
  6.  *** chapter 10, A Socket-Based Interprocess Communications Tutorial,
  7.  *** Revision A, of 27 March 1990, Fig. 10-11, pp. 270-271.
  8.  ***
  9.  ***/
  10. #include    <sys/types.h>
  11. #include    <sys/socket.h>
  12. #include    <sys/time.h>
  13. #include    <netinet/in.h>
  14. #include    <netdb.h>
  15. #include    <stdio.h>
  16. #define    TRUE    (1)
  17. #define    DATA    "\nFrom: server\nTo:   client\nMssg: Hello client!\n"
  18. #define    Port    (31768)
  19.  
  20. main()
  21. {
  22.     int        sock, length;
  23.     struct    sockaddr_in server;
  24.     int        msgsock;
  25.     char    buf[1024];
  26.     fd_set    ready;
  27.     struct    timeval    to;
  28.  
  29.     /* Create socket. */
  30.     sock = socket(AF_INET, SOCK_STREAM, 0);
  31.     if (sock < 0)
  32.     {
  33.         perror("Server--> opening stream socket");
  34.         exit(1);
  35.     }
  36.     /* Name socket using wildcards. */
  37.     server.sin_family = AF_INET;
  38.     server.sin_addr.s_addr = INADDR_ANY;
  39.     server.sin_port = Port;
  40.     if (bind(sock, (struct sockadd *)&server, sizeof server) < 0)
  41.     {
  42.         perror("Server--> getting socket name");
  43.         exit(1);
  44.     }
  45.     printf("Server--> Socket port #%d\n", ntohs(server.sin_port));
  46.  
  47.     /* Start accepting connections. */
  48.     listen(sock, 5);
  49.     do
  50.     {
  51.         FD_ZERO(&ready);
  52.         FD_SET(sock, &ready);
  53.         to.tv_sec = 5;
  54.         if (select(sock + 1, &ready, (fd_set *)0, (fd_set *)0, &to) < 0)
  55.         {
  56.             perror("Server--> select");
  57.             continue;
  58.         }
  59.         if (FD_ISSET(sock, &ready))
  60.         {
  61.             msgsock = accept(sock, (struct sockaddr *) 0, (int *) 0);
  62.             if (msgsock == -1)
  63.             {
  64.                 perror("Server--> accept");
  65.             }
  66.             else
  67.             {
  68.                 bzero(buf, sizeof buf);
  69.                 if ((length = recv(msgsock, buf, 1024, 0)) < 0)
  70.                 {
  71.                     perror("Server--> reading stream message");
  72.                 }
  73.                 else
  74.                 {
  75.                     buf[length] = '\0';
  76.                     printf("Server-->%s\n", buf);
  77.                 }
  78.                 if (send(msgsock, DATA, sizeof DATA, 0) < 0)
  79.                 {
  80.                     perror("Server--> sending steam message");
  81.                 }
  82.             }
  83.             close(msgsock);
  84.         }
  85.         else
  86.         {
  87.             /* Do something else. */
  88.         }
  89.     } while (TRUE);
  90.     exit(0);
  91. }
  92.